package com.bytezero.testone;
import java.util.Arrays;
/***
 * 
 * @Description 
 * @author  Bytezero·zhenglei!      Email:420498246@qq.com
 * @version
 * @date 2021年8月29日下午7:54:44
 * @
 *
 */
import java.util.Scanner;

public class HelloWorld
{
	/*
	public static void main(String[] args)
	{
		//1 静态初始化 数字初始化和数组元素的赋值操作同时进行
		int[] ids = new int[] {103,1034};
		
		//2 动态初始化 数字初始化和数组元素的赋值操作分开进行
		String[] names = new String[5];
	    //总结：数组一旦初始化完成，其长度就确定了	  
		
		
		//2.如何调用数组的指定位置的元素：通过角标的方式调用
		//数组角标 从0开始   数组的长度-1结束
		names[0] = "小明";
		names[1] = "小红";
		names[2] = "小军";
		names[3] = "小黄";
		names[4] = "小绿";
		
		
		//获取数组长度
		//属性：length
		System.out.println(names.length);  //5
		
		
		//遍历
//		System.out.println(names[0]);
//		System.out.println(names[1]);
//		System.out.println(names[2]);
//		System.out.println(names[3]);
//		System.out.println(names[4]);
		
		for(int i = 0;i<names.length;i++)
		{
			System.out.println(names[i]);
		}
		
		*/
	/*
	  public static void main(String[] args)
	  {
		  int[] arry = new int[4];         //int 默认值0   //浮点型 0.0
		  for(int i =0; i < arry.length;i++)
		  {
			  System.out.println(arry[i]);
		  }
		  
		  System.out.println("-----------");
		  char[] arr1 = new char[5];       //默认值是 0 ascall码0
		  int i =0;
		  for( i =0; i <arr1.length;i++)
		  {
			  System.out.println("------"+arr1[i]+"-------");
		  }
		  
		  if(arr1[0]==0)
		  {
			  System.out.println("你好");
		  }
		  
		  boolean[] arr4 = new boolean[5];
		  System.out.println(arr4[0]);   //默认值是false
		  
		  String[] arr5 = new String[5];
		  
		  System.out.println(arr5[0]);   // 引用数据类型 默认值是 null 没有赋值
		  
		  if(arr5[0]== null)
		  {
			  System.out.println("zhenglei");
		  }
		  
	  }
	  */
		/*
		public static void main(String[] args)
		{
			int[] arr = new int[] {8,6,3,1,9,5,4,7};
			int[] index = new int[] {3,2,7,0,4,5,1,6,3,7,3};
			String tel = "";
			for(int i =0; i<index.length;i++)
			{
				tel+=arr[index[i]];
			}
			System.out.println("Biubiu+"+tel); 
		}
	  
	  */
	
	
	
	
		
	/*
	 *  从键盘读入学生成绩 找出最高分 并输出学生等级成绩
	 *   成绩>=最高分-10    等级为’A‘
	 *   成绩>=最高分-20    等级为’B‘
	 *   成绩>=最高分-30    等级为'C'
	 *   其余               等级为’D‘
	 *   
	 */
	
	/*
		public static void main(String[] args)
		{
			
			 Scanner scan = new  Scanner(System.in);
			 System.out.println("请输入学生人数：");
			 int number = scan.nextInt();
			 
			 //double  studentSort= scan.nextDouble();
			 //创建数组
			 int [] scores = new int[number];
			 
			 System.out.println("请输入"+number+"个学生分数：");
			 for(int i = 0; i<scores.length;i++)
			 {
				 scores[i] = scan.nextInt();
			 }
			 //获取元素的最大的值：最高分
			 int maxScore = 0;
			 for(int i = 0;i <scores.length;i++)
			 {
				 if(maxScore < scores[i])
				 {
					 maxScore = scores[i];
				 }
				
			 }
			 System.out.println("最高分为："+maxScore);
			 
			 //根据分数的差值  得到学生的等级  并输出
			 
			 char level;
			 for(int i =0;i <scores.length;i++)
			 {
				 if(maxScore - scores[i] <=10)
				 {
					 level = 'A';
				 }
				 else if(maxScore - scores[i] <= 20)
				 {
					 level = 'B';
				 }
				 else if(maxScore -  scores[i] <= 30)
				 {
					 level = 'C';
				 }
				 else
				 {
					 level ='D'; 
				 }
				 
				 System.out.println("student  "+i+"  score is  "+scores[i]+
						 ",grade is  " + level);
				 
			 }
			 
			 
			
			 
		}
		*/
		
		
		//多维数组的使用
	/*
        public static void main(String[] args) 
        {
			//二维数组的声明和初始化
        	int[]arr= new int[] {1,2,3};   //一维
        	
        	//静态初始化
        	int[][]arr1 = new int[][] {{1,2,3},{4,5},{6,7,8}};
        	
        	//动态初始化1
        	String[][]arr2 = new String[3][2];
        	//动态初始化2
        	String[][]arr3 = new String[3][];
        	
        	
        	//错误的情况
        	//String[][]arr4 = new String[][3];
        	
        	//正确
        	int[] arr4[] = new int[][] {{1,2,3},{5,6}};
        	int[] arr5[] =  {{1,2,3},{5,6}};
        	
        	//2.如何调用数组的指定位置的元素
        	System.out.println(arr1[0][2]);//3
        	System.out.println(arr4[1][0]);//5
        	System.out.println(arr2[1][1]);//没赋值 null
        	
        	arr3[1] = new String[4];
        	System.out.println(arr3[1][3]);
        	
        	
        	//获取数组的长度
        	System.out.println(arr4.length); //2
        	System.out.println(arr4[0].length); //3
        	System.out.println(arr4[1].length);//2
        	
        	//遍历数组
        	for(int i = 0; i <arr4.length;i++)
        	{
        		for(int j = 0; j <arr4[i].length;j++)
        		{
        			System.out.print(arr4[i][j]+"  ");
        		}
        		System.out.println();
        	}
        	
        
        	//规定：二维数组分为外曾数组的元素  内曾数组的元素
        	 //int[]arr = new int[4][3]
            //外层元素： arr[0],arr[1]等
        	//内层元素 ：arr[0][0],arr[1][2]等
        	//外层元素的初始化值：地址值
        	//内层元素的初始化值：与一维数组初始化情况相同
        	 //int[]arr = new int[4][]
        	//外层元素的初始化值：null
        	//内层元素的初始化值：报错
        	
        	
        	
        	//数组初始化值
        	int[][]arr7 = new int[4][3];
        	System.out.println(arr7[0]);  //[I@10f87f48  地址值
        	System.out.println(arr7[0][0]); //0
        	//System.out.println(arr7);        //地址值
        	
        	float[][]arr8 = new float[4][3];
        	System.out.println(arr8[0]);  // 地址值
        	System.out.println(arr8[0][0]); //0.0
        	
        	
        	
        	String[][]arr9 = new String[4][3];
        	System.out.println(arr9[0]);  // 地址值
        	System.out.println(arr9[0][0]); //null
        	
        	float[][]arr10 = new float[4][]; //null
        	System.out.println(arr10[1]);
        	// System.out.println(arr10[1][0]);   //报错 因为上一行都无指针  这个是错误的
        	
        	
        	
        	//遍历二维数组
        	int[][]numo= new int[][] {{1123,1,1,2},{2,5,5,}};
        	
        	for(int i =0; i<numo.length;i++)
        	{
        		for(int j = 0; j<numo[i].length;j++)
        		{
        			System.out.print(numo[i][j]+" ");
        		}
        		System.out.println();
        	}
        	*/
        	/*
        	// 使用二维数组打印 10 行杨辉三角
        	public static void main(String[] args) 
        	{
				//1.声明 并初始化二维数组
        		int[][]yanghui = new int[10][];
        		
        		
        		
        		//2.给数组元素赋值
        		for(int i = 0; i<yanghui.length;i++)
        		{
        			yanghui[i] = new int[i +1 ];
        		
        		//2.1给首末元素赋值
        		yanghui[i][0] = 1;
        		yanghui[i][i]=1;
        		
        		//2.2给每行的非首末元素赋值
        		if(i>1)
        		{
        			for(int j =1;j<yanghui[i].length-1;j++)
        			{
        				yanghui[i][j] = yanghui[i-1][j-1]+yanghui[i-1][j];
        			}
        		}
        		
        	}
        		
        		
        		//3.遍历二维数组
        		for(int i =0;i<yanghui.length;i++)
        		{
        			for(int j = 0;j <yanghui[i].length;j++)
        			{
        				System.out.print(yanghui[i][j]+" ");
        			}
        			System.out.println();
        		
        		
			}
        	
        	
        	
        	
        	
        	
		}
		*/
		
	/*
	 * 
	 * 算法考查：求数值型数组中的最大元素 最小值 平均值 总和等
	 * 要求：随机数是 两位数
	 * [10,99]
	 * 公式：(int)(Math.random()*(99-10+1)+10)
	 *       
	 */
	/*
	public static void main(String[] args) 
	{
		int[]arr = new int[10];
		
		for(int i =0;i <arr.length;i++)
		{
			arr[i] = (int)(Math.random()*(99-10+1)+10);
		}
		
		for(int i =0;i<arr.length;i++)
		{
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		
		//求最大值
		int maxValue = arr[0];
		for(int i =0; i<arr.length;i++)
		{
			if(maxValue < arr[i])
			{
				maxValue = arr[i];
			}
		}
		System.out.println("最大值为：" + maxValue);
		
		//最小值
		
		
		
		
		for(int i =0;i<arr.length;i++)
		{
			System.out.print(arr[i]+"\t");
		}
		System.out.println();
		
		//求最小值
	    int minValue = arr[0];
		for(int i =0; i<arr.length;i++)
		{
			if(minValue > arr[i])
			{
				minValue = arr[i];
			}
		}
		System.out.println("最小值为：" + minValue);
		//总和
		int sum = 0;
		for(int i =0; i<arr.length;i++)
		{
			sum += arr[i];
		}
		System.out.println("总和为："+sum);
		
		
		
		//平均数
		int avgValue = sum/arr.length;
		System.out.println("平均数为："+avgValue);
		
			
	}
		*/
		
		//复制
	/*
	public static void main(String[] args) {
		int[]array1,array2;
		array1 = new int[] {6,3,5,8,9,5,17,5,58,56};
		
		for(int i =0; i<array1.length;i++)
		{
			System.out.print(array1[i]+" ");
		}
		System.out.println();

		//赋值array2变量等于array1
		//不能称作 数组 复制
		array2 = array1;    //地址赋值
		//修改array2中的 偶索引元素，使其等于索引值（如array[0] = 0,array[2] = 2）
		
		for(int i =0; i<array2.length;i++)
		{
			if(i % 2==0)
			{
				array2[i] = i;
			}
		}
		//System.out.println();
		

		for(int i =0; i<array1.length;i++)
		{
			System.out.print(array1[i]+" ");
		}
		System.out.println();
		
		System.out.println();
		
		
		
		//数组的复制：
		int[]array3,array4;
		array3 = new int[] {6,3,5,8,9,5,17,5,58,56};
		
		for(int i =0; i<array3.length;i++)
		{
			System.out.print(array3[i]+" ");
		}
		//System.out.println();
		
		
	     //数组的复制
		array4 = new int[array3.length];
		for(int i =0;i <array4.length;i++)
		{
			array4[i] = array3[i];
		}
		
		
		
		
		//修改array4中的 偶索引元素，使其等于索引值（如array[0] = 0,array[2] = 2）
		for(int i =0; i<array4.length;i++)
		{
			if(i % 2==0)
			{
				array4[i] = i;
			}
		}
		System.out.println();
		

		for(int i =0; i<array3.length;i++)
		{
			System.out.print(array3[i]+" ");
		}
		System.out.println();
			
		
		
		
		System.out.println();
		String[] arr = new String[] {"AA","BB","CC","DD","EE","FF"};
		for(int i =0; i <arr.length;i++)
		{
			System.out.print(arr[i]+"  ");
		}
		System.out.println();
		
		//复制的操作
		 String[] arr2 = new String[arr.length] ;
		 for(int i =0; i<arr.length;i++)
		 {
			 arr2[i] = arr[i];
		 }
		
	    for(int i =0; i <arr2.length;i++)
		{
			System.out.print(arr2[i]+"  ");
		}
		System.out.println();
	
	
		//数组的反转
		//方式一
		//System.out.println("数组的反转");
		
//		for(int i = 0; i <arr.length/2;i++)
//		{
//			String temp = arr[i];
//			arr[i] = arr[arr.length - i -1];
//			arr[arr.length - i -1] = temp;
//		}
//		
		//方式二
		
//		for(int i = 0,j = arr.length-1;i<j;i++,j--)
//		{
//			String temp = arr[i];
//			arr[i] = arr[j];
//			arr[j]  = temp;
//		}
//		
		
		
	    for(int i =0; i <arr.length;i++)
		{
			System.out.print(arr[i]+"  ");
		}
		System.out.println();
		
		
		//要找的数 -  数组中的第一个元素 / 最大的数 - 第一个元素
		//数组的查找（线性查找  二分法查找）
		//线性查找：
		//equals
		
		String dest = "BB";
		boolean isFlag = true;
		
		for(int i = 0; i <arr.length;i++)
		{
			if(dest.equals(arr[i]))
			{
				System.out.println("找到了指定的元素，位置为："+ i);
				isFlag = false;
				break;
			}
		}
		
		if(isFlag)
		{
			System.out.println("没找到！");
		}
		
		//二分法查找
		//前提要有序的数组
	    
		int[] num = new int[]{-98, 45,69,87,99,106,253,630,789,999};
		int dest1 = 69;
		int head = 0;   //初始首索引
		int end = num.length - 1; //初始末索引
		boolean isFlag1= true;
		
		while(head <= end)
		{
			int middle = (head + end) /2;  //中间值
			if(dest1 == num[middle])
			{
				System.out.println("找到了指定的元素，位置为：" + middle);
				isFlag1 = false;
				break;
			}
			else if(num[middle]>dest1)
			{
				end =  middle -1;
			}
			else //num[middle] < dest1
			{
				head = middle +1;
			}
		}
		if(isFlag1)
		{
			System.out.println("没有找到！");
		}
		
		
		
		
		
		
		
	}	
	*/
	
	
	//排序
		/*
		 * 十大排序
		 * 
		 * 选择排序
		       直接选择排序  堆排序
		 * 插入排序
		        直接插入排序  折半插入排序  Shell排序（希尔）
		 * 交换排序
		        冒泡排序  快速排序
		 * 归并排序
		 * 基数排序
		 * 桶式排序
		 
		 * 
		 */
		
		//冒泡排序
	  
/*
	public static void main(String[] args) 
	{
		int[]arr = new int[] {89,56,56,79,21,-5,-54,-621,-11,-121,666,55,852,6262};
		for(int i = 0; i <arr.length;i++)
		{
			System.out.print(arr[i]+" ");
		}
		System.out.println();
		
		
		System.out.println("---------冒泡排序---------");
		
		for(int i =0;i <arr.length - 1;i++)
		{
			for(int j = 0; j <arr.length - 1 -i; j++)
			{
				if(arr[j]>arr[j+1])
				{
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		
		for(int i = 0; i <arr.length;i++)
		{
			System.out.print(arr[i] + " ");
		}
		System.out.println();
	}
	
	*/
	//操作数组的工具类   java.util.Arrays :操作数组的工具类 里面定义了很多操作数组的方法
	/*
	public static void main(String[] args)
	{
		
		//1.boolean equals(int [] a,int[] b)  判断两个数组是否相等
		int[] arr1 = new int[] {1,35,64,41,-52,1,2,5};
		int[] arr2 = new int[] {1,35,64,41,-52,1,5,2};
		boolean isEquals = Arrays.equals(arr1, arr2);
		System.out.println(isEquals);  //false元素一样 数组不一样
		
		
		
		//2.String toString(int[] a)   输出数组信息
		System.out.println(Arrays.toString(arr1));
		
		
		//3.void fill(int[] a,int val)  将指定值填充到数组之中
		Arrays.fill(arr1,4444);
		System.out.println(Arrays.toString(arr1));  //填充 44444
	
		
		//4.void sort(int[] a)   对数组进行排序
		System.out.println(Arrays.toString(arr2));
		Arrays.sort(arr2);
		System.out.println(Arrays.toString(arr2));
		
		
		
		//5.int binarySerach(int[] a,int key)  对排序后的数组进行二分法检索指定的值
		//有序  //负数没有找到
		int [] arr3 = new int[] {21,25,35,54,65,85,97,98,99,321};
		int index =  Arrays.binarySearch(arr3, 321);
		if(index >=0)
		{
			System.out.println("找到了，它在第"+index+"位.");
		}
		else
		{
			System.out.println("没有找到！");
		}
		
		
		
	}

	*/

	

	
	/***
	 * 数组中的常见异常
	 * 
	 * 1.数组角标越界的异常：ArrayIndexOutOfBoundException
	 * 
	 * 2.控制在异常：NullPointerException
	 */
	

	/*************************************************************/

	
	
	
	
	
}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
		
		
	
		
		
		
		
		
		
	

